﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;



namespace SingletonPattern
{

    /// <summary>
    /// 懒汉模式，线程不安全
    /// </summary>
    /// <remarks>
    /// 这种写法lazy loading很明显，但是致命的是在多线程不能正常工作。
    /// </remarks>
    class LazySingleton
    {
        // 定义一个静态变量来保存类的实例
        private static LazySingleton _uniqueInstance=null;

        // 定义私有构造函数，使外界不能创建该类实例
        private LazySingleton() { }




        // 定义公有属性来提供一个全局访问点,同时你也可以定义公有方法来提供全局访问点
        //public static LazySingleton Instance
        //{
        //    // 如果类的实例不存在则创建，否则直接返回
        //    get { return _uniqueInstance ?? (_uniqueInstance = new LazySingleton()); }
        //}

        // or

        /// <summary>
        /// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
        /// </summary>
        /// <returns></returns>
        public static LazySingleton GetInstance()
        {
            // 如果类的实例不存在则创建，否则直接返回
            return _uniqueInstance ?? (_uniqueInstance = new LazySingleton());
        }

     
    }
}
